home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / mus / play / tracker_3_19.lzh / tracker / analyzer.c < prev    next >
C/C++ Source or Header  |  1993-11-11  |  3KB  |  157 lines

  1. /* analyzer.c */
  2.  
  3. /* read module files and output statistics on them */
  4.  
  5. /* $Id: analyzer.c,v 3.2 1993/05/09 14:06:03 espie Exp espie $
  6.  * $Log: analyzer.c,v $
  7.  * Revision 3.2  1993/05/09  14:06:03  espie
  8.  * Added speed check.
  9.  *
  10.  * Revision 3.1  1993/01/16  17:00:27  espie
  11.  * Added patch for non termio.
  12.  *
  13.  * Revision 3.0  1992/11/18  16:08:05  espie
  14.  * New release.
  15.  *
  16.  */
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <string.h>
  21.  
  22. #include "defs.h"
  23. #include "extern.h"
  24. #include "song.h"
  25. #include "pref.h"
  26.  
  27. LOCAL char *id = "$Id: analyzer.c,v 3.2 1993/05/09 14:06:03 espie Exp espie $";
  28.  
  29. int error;
  30.  
  31. /* dummy function for linking wo termio */
  32. BOOL run_in_fg()
  33.     {
  34.     return TRUE;
  35.     }
  36.  
  37. struct song *do_read_song(name, type)
  38. char *name;
  39. int type;
  40.     {
  41.     struct song *song;
  42.     FILE *file;
  43.  
  44.     file = open_file(name, "r", getenv("MODPATH"));
  45.     if (!file)
  46.         return NULL;
  47.     song = read_song(file, type); 
  48.     close_file(file);
  49.     if (song)
  50.         puts(name);
  51.     return song;
  52.     }
  53.  
  54.  
  55. BOOL use_command[16];
  56. BOOL use_extended[16];
  57.  
  58. void analyze_block(b)
  59. struct block *b;
  60.     {
  61.     int i, j;
  62.     struct event *e;
  63.  
  64.     for (i = 0; i < BLOCK_LENGTH; i++)
  65.         {
  66.         int special;
  67.  
  68.         special = 0;
  69.         for (j = 0; j < NUMBER_TRACKS; j++)
  70.             {
  71.             e = &b->e[j][i];
  72.             switch(e->effect)
  73.                 {
  74. #if 0
  75.             case 13:    /* skip */
  76.                 return;
  77.             case 11:    /* fastskip */
  78.                 return;
  79. #endif
  80.             case 14:
  81.                 use_extended[HI(e->parameters)] = TRUE;
  82.                 break;
  83.             case 15:
  84.                 if (special != 0 && e->parameters != special)
  85.                     putchar('!');
  86.                 else
  87.                     special = e->parameters;
  88.             default:
  89.                 use_command[e->effect] = TRUE;
  90.                 }
  91.             }
  92.         }
  93.     }
  94.  
  95.  
  96. void analyze_song(song)
  97. struct song *song;
  98.     {
  99.     int i;
  100.  
  101.     for (i = 0; i < NUMBER_SAMPLES; i++)
  102.         {
  103.         if (song->samples[i].start)
  104.             {
  105.             if (song->samples[i].finetune)
  106.                 printf("Sample %d: finetune is %d\n", 
  107.                     i, song->samples[i].finetune);
  108.             }
  109.         }
  110.     for (i = 0; i < 16; i++)
  111.         {
  112.         use_command[i] = FALSE;
  113.         use_extended[i] = FALSE;
  114.         }
  115.     for (i = 0; i < song->info.maxpat; i++)
  116.         analyze_block(song->info.pblocks+i);
  117.     for (i = 0; i < 16; i++)
  118.         if (use_command[i])
  119.             printf("%3d", i);
  120.     for (i = 0; i < 16; i++)
  121.         if (use_extended[i])
  122.             printf("%3dE", i);
  123.     printf("\n");
  124.     }
  125.  
  126. int main(argc, argv)
  127. int argc;
  128. char **argv;
  129.     {
  130.     int i;
  131.  
  132.     struct pref pref;
  133.     struct song *song;
  134.     int default_type;
  135.  
  136.     default_type = BOTH;
  137.     pref.tolerate = 2;
  138.  
  139.     create_notes_table();
  140.  
  141.     for (i = 1; i < argc; i++)
  142.         {
  143.         song = do_read_song(argv[i], NEW);
  144.         if (!song && error != NEXT_SONG)
  145.             song = do_read_song(argv[i], OLD);
  146.         if (song)
  147.             {
  148.             analyze_song(song);
  149.             release_song(song);
  150.             }
  151.         }
  152.     }
  153.  
  154.         
  155.  
  156.  
  157.